/*     */ package com.zimbra.cs.index.query;
/*     */ 
/*     */ import com.google.common.collect.ImmutableMap.Builder;
/*     */ import com.zimbra.common.service.ServiceException;
/*     */ import com.zimbra.cs.index.QueryOperation;
/*     */ import com.zimbra.cs.mailbox.Mailbox;
/*     */ import java.util.List;
/*     */ import java.util.Map;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public abstract class Query
/*     */ {
/*     */   public static enum Modifier
/*     */   {
/*  40 */     NONE(""),  PLUS("+"),  MINUS("-");
/*     */     
/*     */     private final String symbol;
/*     */     
/*     */     private Modifier(String symbol) {
/*  45 */       this.symbol = symbol;
/*     */     }
/*     */     
/*     */     public String toString()
/*     */     {
/*  50 */       return this.symbol;
/*     */     }
/*     */   }
/*     */   
/*     */   static enum Comparison {
/*  55 */     GT(">"),  GE(">="),  LT("<"),  LE("<=");
/*     */     
/*     */     private final String symbol;
/*     */     
/*     */     private Comparison(String symbol) {
/*  60 */       this.symbol = symbol;
/*     */     }
/*     */     
/*     */     public String toString()
/*     */     {
/*  65 */       return this.symbol;
/*     */     }
/*     */   }
/*     */   
/*  69 */   private static final Map<String, String> LUCENE2QUERY = new ImmutableMap.Builder().put("l.contactData", "contact:").put("l.content", "content:").put("msg_id", "msgid:").put("env_from", "envfrom:").put("env_to", "envto:").put("from", "from:").put("to", "to:").put("cc", "cc:").put("subject", "subject:").put("filename", "filename:").put("type", "type:").put("attachment", "attachment:").put("l.field", "#").build();
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*  86 */   private boolean bool = true;
/*  87 */   private Modifier modifier = Modifier.NONE;
/*     */   
/*     */   public final boolean getBool() {
/*  90 */     return this.bool;
/*     */   }
/*     */   
/*     */   final void setBool(boolean value) {
/*  94 */     this.bool = value;
/*     */   }
/*     */   
/*     */   final boolean evalBool(boolean value) {
/*  98 */     return this.modifier == Modifier.MINUS ? false : !value ? true : value;
/*     */   }
/*     */   
/*     */   public final Modifier getModifier() {
/* 102 */     return this.modifier;
/*     */   }
/*     */   
/*     */   public void setModifier(Modifier mod) {
/* 106 */     this.modifier = mod;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   final String toQueryString(String luceneField, String term)
/*     */   {
/* 116 */     String field = (String)LUCENE2QUERY.get(luceneField);
/* 117 */     if ("l.field".equals(luceneField)) {
/* 118 */       int delim = term.indexOf(':');
/* 119 */       if ((delim <= 0) || (delim >= term.length() - 2)) {
/* 120 */         return field + term;
/*     */       }
/* 122 */       StringBuilder buf = new StringBuilder(field);
/* 123 */       buf.append(term.subSequence(0, delim + 1));
/* 124 */       buf.append('"');
/* 125 */       for (int i = delim + 1; i < term.length(); i++) {
/* 126 */         char ch = term.charAt(i);
/* 127 */         if (ch == '"') {
/* 128 */           buf.append("\\\"");
/*     */         } else {
/* 130 */           buf.append(ch);
/*     */         }
/*     */       }
/* 133 */       buf.append('"');
/* 134 */       return buf.toString();
/*     */     }
/* 136 */     return field + term;
/*     */   }
/*     */   
/*     */ 
/*     */   public String toString()
/*     */   {
/* 142 */     return toString(new StringBuilder()).toString();
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public StringBuilder toString(StringBuilder out)
/*     */   {
/* 156 */     out.append(this.modifier);
/* 157 */     out.append("Q(");
/* 158 */     dump(out);
/* 159 */     return out.append(')');
/*     */   }
/*     */   
/*     */   public StringBuilder toSanitizedString(StringBuilder out) {
/* 163 */     out.append(this.modifier);
/* 164 */     out.append("Q(");
/* 165 */     sanitizedDump(out);
/* 166 */     return out.append(')');
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */   abstract void dump(StringBuilder paramStringBuilder);
/*     */   
/*     */ 
/*     */ 
/*     */   void sanitizedDump(StringBuilder out)
/*     */   {
/* 178 */     dump(out);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String toString(List<Query> clauses)
/*     */   {
/* 188 */     StringBuilder out = new StringBuilder();
/* 189 */     for (Query clause : clauses) {
/* 190 */       clause.toString(out);
/*     */     }
/* 192 */     return out.toString();
/*     */   }
/*     */   
/*     */   public abstract QueryOperation compile(Mailbox paramMailbox, boolean paramBoolean)
/*     */     throws ServiceException;
/*     */   
/*     */   public abstract boolean hasTextOperation();
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/index/query/Query.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */